Beveiliging van webservices
> Veiligheid – WS-Security X.509 Certificate Token Profile > Veiligheid - WS-Security SAML Token Profile / Holder-of-Key |
Webservices op het SOA-platform worden op verschillende niveaus beveiligd. Op transportniveau is steeds een SSL/TLS-verbinding vereist. Op berichtniveau gebeurt de authenticatie van de service consumer op basis van X.509-certificaten.
De gebruikte WS-Security-standaarden staan beschreven in volgende specificaties:
Foutmelding
Wanneer het SOA-platform een request niet aanvaardt vanwege een securityfout, wordt een SOAP fault met de volgende error code teruggestuurd: SOA-01001 – Service call not authenticated.
|
Veiligheid – WS-Security X.509 Certificate Token Profile
Deze security policy is enkel van toepassing voor het oproepen van de SecurityTokenService (STS). Ze beschrijft hoe een SOAP-bericht met een X.509-certificaat moet ondertekend worden.
De wsse:Security header bevat volgende onderdelen:
- wsse:BinarySecurityToken met het consumer X.509v3-certificaat in base64-notatie;
- wsu:Timestamp met maximale geldigheid van 5 minuten;
- ds:Signature met digitale handtekening over BST, TMS en soapenv:Body. Elk blok wordt gecanonicaliseerd (Exclusive) en gehasht (SHA256) (<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>).
De handtekening zelf is van het type RSA-SHA256 (voor een certificaat met RSA-vercijfering - <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>) of ECDSA-SHA256 (voor een certificaat ECC - <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha256"/>)
Voorbeeld met PlatformIntegrationConsumerTest (vereenvoudigd)
De operatie checkAccessControl van PlatformIntegrationConsumerTest vereist een X.509 certificaat en handtekening. U test hiermee de geldigheid van uw certificaat en handtekening.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
|
Veiligheid - WS-Security SAML Token Profile / Holder-of-Key
Een groot aantal diensten moeten opgeroepen worden met een SAML-token van een centrale authenticatiedienst: API Portal (vul in de zoekfunctie de term 'IAM-STS-SecurityTokenService' in). Dit gebeurt volgens de OASIS WS-Trust-standaard.
Het authenticatieproces verloopt als volgt:
- De service consumer authenticeert zich één keer bij de STS met een X.509-certificaat.
- Hij ontvangt van de STS een ondertekend SAML-token dat gedurende een beperkte periode geldig is.
- Met dit token kan de consumer gedurende de geldigheidsperiode verschillende webservices oproepen.
Ter informatie: Dit STS-mechanisme moet u eenmalig implementeren alvorens een business service te kunnen oproepen.
Stap voor stap
Stap 1
De consumer stuurt een RequestSecurityToken (RST) naar STS met het verzoek om een SAML 1.1-token te verkrijgen. De consumer ondertekent de SOAP oproep volgens de X.509 _SHA256 security policy.
Voorbeeld RST
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<wst:RequestSecurityToken Context="RC-7150fca4-1999-45b8-8284-a3944409a345" |
Stap 2
Na authenticatie zal de STS antwoorden met een RequestSecurityTokenResponse (RSTR) die het gevraagde SAML-token bevat. De SAML assertion kan met xpath gefilterd worden (//soapenv:Body/wst:RequestSecurityTokenResponse/wst:RequestedSecurityToken/*).
Voorbeeld RSTR
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<wst:RequestSecurityTokenResponse Context = "RC-938ae2a2-6839-41ee-9c0e-7eab62a5a748" xmlns:wst = "http://docs.oasis-open.org/ws-sx/ws-trust/200512" > |
De attributen in het token worden geëvalueerd tijdens de toegangscontrole (autorisatie) van de business diensten. De XML structuur is digitaal ondertekend door STS om de authenticiteit ervan te garanderen. Het blok Conditions geeft aan in welke periode het SAML token kan herbruikt worden door de consumer.
Stap 3
Met een SAML token ontvangen van STS kan de consumer gedurende de geldigheidsperiode van het token meerdere business diensten oproepen.
De wsse:Security header bevat volgende onderdelen:
- saml:Assertion is het door STS ondertekende SAML-token. De xml-data mogen niet worden gewijzigd (geen formattering, geen namespace-wijzigingen), anders wordt de digitale handtekening gebroken.
- wsu:Timestamp met maximale geldigheid van 5 minuten.
- ds:Signature met digitale handtekening over TMS en soapenv:Body. Elk blok wordt gecanonicaliseerd (Exclusive) en gehasht (SHA-256).
De handtekening zelf is van het type :
RSA-SHA256 (voor een certificaat met RSA-vercijfering - <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>)
of
ECDSA-SHA256 (voor een certificaat ECC - <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#ecdsa-sha256"/>).
De ds:KeyInfo verwijst naar de saml:Assertion op basis van de AssertionID.
Voorbeeld met PlatformIntegrationConsumerTest (vereenvoudigd)
De operatie checkBrokeredAccess van PlatformIntegrationConsumerTest vereist een SAML-token van STS. U test hiermee dat het token verkregen van STS in stap 2 correct gekopieerd wordt in de oproep naar de business webservice.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
<soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:be:fgov:ehealth:platformintegrationconsumertest:v1" |
Veiligheid - TLS verbinding
Op transportniveau moet de service consumer verplicht een TLS -verbinding maken. Daardoor is hij zeker van de identiteit van de serviceprovider (SOA-platform) en worden gegevens in transit beveiligd door encryptie.
De servercertificaten van het SOA-platform zijn gevalideerd door het Sectigo en moeten door de service consumer aanvaard worden.
Chaining
1
2
3
|
Sectigo (AAA) |_ USERTRUST RSA CERTIFICATION AUTHORITY |_GEANT OV RSA CA 4 |
of
Chaining
1
2
|
USERtrust RSA Certification Authority (avec le nom amical «SECTIGO») |_ |_GEANT OV RSA CA 4 |
Opgelet: de servercertificaten worden op regelmatige basis vernieuwd, en dat geldt ook voor de CA die de certificaten uitgeeft.
Ter informatie: de acceptatieomgeving is bedoeld voor het uitvoeren van testen voordat de productieomgeving wordt gebruikt.
U kunt de certificaten downloaden met een browser of via het openssl-commando:
1
|
>> openssl s_client -showcerts -connect services.ehealth.fgov.be:443 |
Voorbeeld met PlatformIntegrationConsumerTest
De eerste operatie van PlatformIntegrationConsumerTest (checkConnection) heeft geen beveiling op message-niveau en daarom geen wsse:Security-blok in de SOAP header. U test hiermee de SSL/TLS verbinding met het SOA platform.
1
2
3
4
5
6
7
8
9
|
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:be:fgov:ehealth:platformintegrationconsumertest:v1" |